Trò chơi Tic-Tac-Toe, game đánh caro full source code
- ReorderableListResources.cs
- PhotonNetwork /
- Editor /
- Photon Unity Networking /
- Assets /
- project /
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4
5 using UnityEngine;
6 using UnityEditor;
7
8 using System;
9
10 namespace Rotorz.ReorderableList.Internal
11 {
12
13 /// <summary>
14 /// Resources to assist with reorderable list control.
15 /// </summary>
16 internal static class ReorderableListResources
17 {
18
19 static ReorderableListResources()
20 {
21 GenerateSpecialTextures();
22 LoadResourceAssets();
23 }
24
25 #region Texture Resources
26
27 private enum ResourceName
28 {
29 add_button = 0,
30 add_button_active,
31 container_background,
32 grab_handle,
33 remove_button,
34 remove_button_active,
35 title_background,
36 }
37
38 /// <summary>
39 /// Resource assets for light skin.
40 /// </summary>
41 /// <remarks>
42 /// <para>Resource assets are PNG images which have been encoded using a base-64
43 /// string so that actual asset files are not necessary.</para>
44 /// </remarks>
45 private static string[] s_LightSkin = {
46 "iVBORw0KGgoAAAANSUhEUgAAAB4AAAAQCAYAAAABOs/SAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAAAW0lEQVRIS+3NywnAQAhF0anI4mzVCmzBBl7QEBgGE5JFhBAXd+OHM5gZZgYRKcktNxu+HRFF2e6qhtOjtQM7K/tZ+xY89wSbazg9eqOfw6oag4rcChjY8coAjA2l1RxFDY8IFAAAAABJRU5ErkJggg==",
47 "iVBORw0KGgoAAAANSUhEUgAAAB4AAAAQCAYAAAABOs/SAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAGlJREFUeNpiFBER+f/jxw8GNjY2BnqAX79+MXBwcDAwMQwQGHoWnzp1CoxHjo8pBSykBi8+MTMzs2HmY2QfwXxKii9HExdZgNwgHuFB/efPH7pZCLOL8f///wyioqL/6enbL1++MAIEGABvGSLA+9GPZwAAAABJRU5ErkJggg==",
48 "iVBORw0KGgoAAAANSUhEUgAAAAUAAAAECAYAAABGM/VAAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAAAMElEQVQYV2P4//8/Q1FR0X8YBvHBAp8+ffp/+fJlMA3igwUfPnwIFgDRYEFM7f8ZAG1EOYL9INrfAAAAAElFTkSuQmCC",
49 "iVBORw0KGgoAAAANSUhEUgAAAAkAAAAFCAYAAACXU8ZrAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAAAIElEQVQYV2P49OnTf0KYobCw8D8hzPD/P2FMLesK/wMAs5yJpK+6aN4AAAAASUVORK5CYII=",
50 "iVBORw0KGgoAAAANSUhEUgAAAAgAAAACCAIAAADq9gq6AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAABVJREFUeNpiVFZWZsAGmBhwAIAAAwAURgBt4C03ZwAAAABJRU5ErkJggg==",
51 "iVBORw0KGgoAAAANSUhEUgAAAAgAAAACCAIAAADq9gq6AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAABVJREFUeNpivHPnDgM2wMSAAwAEGAB8VgKYlvqkBwAAAABJRU5ErkJggg==",
52 "iVBORw0KGgoAAAANSUhEUgAAAAUAAAAECAYAAABGM/VAAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAEFJREFUeNpi/P//P0NxcfF/BgRgZP78+fN/VVVVhpCQEAZjY2OGs2fPNrCApBwdHRkePHgAVwoWnDVrFgMyAAgwAAt4E1dCq1obAAAAAElFTkSuQmCC"
53 };
54 /// <summary>
55 /// Resource assets for dark skin.
56 /// </summary>
57 /// <remarks>
58 /// <para>Resource assets are PNG images which have been encoded using a base-64
59 /// string so that actual asset files are not necessary.</para>
60 /// </remarks>
61 private static string[] s_DarkSkin = {
62 "iVBORw0KGgoAAAANSUhEUgAAAB4AAAAQCAYAAAABOs/SAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAIBJREFUeNpiVFZW/u/i4sLw4sULBnoACQkJhj179jAwMQwQGHoWl5aWgvHI8TGlgIXU4MUn1t3dPcx8HB8fD2cvXLgQQ0xHR4c2FmMzmBTLhl5QYwt2cn1MtsXkWjg4gvrt27fgWoMeAGQXCDD+//+fQUVF5T89fXvnzh1GgAADAFmSI1Ed3FqgAAAAAElFTkSuQmCC",
63 "iVBORw0KGgoAAAANSUhEUgAAAB4AAAAQCAYAAAABOs/SAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAHlJREFUeNpiFBER+f/jxw8GNjY2BnqAX79+MXBwcDAwMQwQGHoWv3nzBoxHjo8pBSykBi8+MWAOGWY+5uLigrO/ffuGIYbMppnF5Fg2tFM1yKfk+pbkoKZGEA+OVP3nzx+6WQizi/H///8MoqKi/+np2y9fvjACBBgAoTYjgvihfz0AAAAASUVORK5CYII=",
64 "iVBORw0KGgoAAAANSUhEUgAAAAUAAAAECAYAAABGM/VAAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAD1JREFUeNpi/P//P4OKisp/Bii4c+cOIwtIwMXFheHFixcMEhISYAVMINm3b9+CBUA0CDCiazc0NGQECDAAdH0YelA27kgAAAAASUVORK5CYII=",
65 "iVBORw0KGgoAAAANSUhEUgAAAAkAAAAFCAYAAACXU8ZrAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAACRJREFUeNpizM3N/c9AADAqKysTVMTi5eXFSFAREFPHOoAAAwBCfwcAO8g48QAAAABJRU5ErkJggg==",
66 "iVBORw0KGgoAAAANSUhEUgAAAAgAAAAECAYAAACzzX7wAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAACJJREFUeNpi/P//PwM+wHL06FG8KpgYCABGZWVlvCYABBgA7/sHvGw+cz8AAAAASUVORK5CYII=",
67 "iVBORw0KGgoAAAANSUhEUgAAAAgAAAAECAYAAACzzX7wAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAACBJREFUeNpi/P//PwM+wPKfgAomBgKAhYuLC68CgAADAAxjByOjCHIRAAAAAElFTkSuQmCC",
68 "iVBORw0KGgoAAAANSUhEUgAAAAUAAAAECAYAAABGM/VAAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAADtJREFUeNpi/P//P4OKisp/Bii4c+cOIwtIQE9Pj+HLly9gQRCfBcQACbx69QqmmAEseO/ePQZkABBgAD04FXsmmijSAAAAAElFTkSuQmCC"
69 };
70
71 /// <summary>
72 /// Gets light or dark texture "add_button.png".
73 /// </summary>
74 public static Texture2D texAddButton
75 {
76 get { return s_Cached[ (int)ResourceName.add_button ]; }
77 }
78 /// <summary>
79 /// Gets light or dark texture "add_button_active.png".
80 /// </summary>
81 public static Texture2D texAddButtonActive
82 {
83 get { return s_Cached[ (int)ResourceName.add_button_active ]; }
84 }
85 /// <summary>
86 /// Gets light or dark texture "container_background.png".
87 /// </summary>
88 public static Texture2D texContainerBackground
89 {
90 get { return s_Cached[ (int)ResourceName.container_background ]; }
91 }
92 /// <summary>
93 /// Gets light or dark texture "grab_handle.png".
94 /// </summary>
95 public static Texture2D texGrabHandle
96 {
97 get { return s_Cached[ (int)ResourceName.grab_handle ]; }
98 }
99 /// <summary>
100 /// Gets light or dark texture "remove_button.png".
101 /// </summary>
102 public static Texture2D texRemoveButton
103 {
104 get { return s_Cached[ (int)ResourceName.remove_button ]; }
105 }
106 /// <summary>
107 /// Gets light or dark texture "remove_button_active.png".
108 /// </summary>
109 public static Texture2D texRemoveButtonActive
110 {
111 get { return s_Cached[ (int)ResourceName.remove_button_active ]; }
112 }
113 /// <summary>
114 /// Gets light or dark texture "title_background.png".
115 /// </summary>
116 public static Texture2D texTitleBackground
117 {
118 get { return s_Cached[ (int)ResourceName.title_background ]; }
119 }
120
121 #endregion
122
123 #region Generated Resources
124
125 public static Texture2D texItemSplitter { get; private set; }
126
127 /// <summary>
128 /// Generate special textures.
129 /// </summary>
130 private static void GenerateSpecialTextures()
131 {
132 var splitterColor = EditorGUIUtility.isProSkin
133 ? new Color( 1f, 1f, 1f, 0.14f )
134 : new Color( 0.59f, 0.59f, 0.59f, 0.55f )
135 ;
136 texItemSplitter = CreatePixelTexture( "(Generated) Item Splitter", splitterColor );
137 }
138
139 /// <summary>
140 /// Create 1x1 pixel texture of specified color.
141 /// </summary>
142 /// <param name="name">Name for texture object.</param>
143 /// <param name="color">Pixel color.</param>
144 /// <returns>
145 /// The new <c>Texture2D</c> instance.
146 /// </returns>
147 public static Texture2D CreatePixelTexture( string name, Color color )
148 {
149 var tex = new Texture2D( 1, 1, TextureFormat.ARGB32, false, true );
150 tex.name = name;
151 tex.hideFlags = HideFlags.HideAndDontSave;
152 tex.filterMode = FilterMode.Point;
153 tex.SetPixel( 0, 0, color );
154 tex.Apply();
155 return tex;
156 }
157
158 #endregion
159
160 #region Load PNG from Base-64 Encoded String
161
162 private static Texture2D[] s_Cached;
163
164 /// <summary>
165 /// Read textures from base-64 encoded strings. Automatically selects assets based
166 /// upon whether the light or dark (pro) skin is active.
167 /// </summary>
168 private static void LoadResourceAssets()
169 {
170 var skin = EditorGUIUtility.isProSkin ? s_DarkSkin : s_LightSkin;
171 s_Cached = new Texture2D[ skin.Length ];
172
173 for( int i = 0; i < s_Cached.Length; ++i )
174 {
175 // Get image data (PNG) from base64 encoded strings.
176 byte[] imageData = Convert.FromBase64String( skin[ i ] );
177
178 // Gather image size from image data.
179 int texWidth, texHeight;
180 GetImageSize( imageData, out texWidth, out texHeight );
181
182 // Generate texture asset.
183 var tex = new Texture2D( texWidth, texHeight, TextureFormat.ARGB32, false, true );
184 tex.hideFlags = HideFlags.HideAndDontSave;
185 tex.name = "(Generated) ReorderableList:" + i;
186 tex.filterMode = FilterMode.Point;
187 tex.LoadImage( imageData );
188
189 s_Cached[ i ] = tex;
190 }
191
192 s_LightSkin = null;
193 s_DarkSkin = null;
194 }
195
196 /// <summary>
197 /// Read width and height if PNG file in pixels.
198 /// </summary>
199 /// <param name="imageData">PNG image data.</param>
200 /// <param name="width">Width of image in pixels.</param>
201 /// <param name="height">Height of image in pixels.</param>
202 private static void GetImageSize( byte[] imageData, out int width, out int height )
203 {
204 width = ReadInt( imageData, 3 + 15 );
205 height = ReadInt( imageData, 3 + 15 + 2 + 2 );
206 }
207
208 private static int ReadInt( byte[] imageData, int offset )
209 {
210 return ( imageData[ offset ] << 8 ) | imageData[ offset + 1 ];
211 }
212
213 #endregion
214
215 #region GUI Helper
216 private static GUIStyle s_TempStyle = new GUIStyle();
217
218 /// <summary>
219 /// Draw texture using <see cref="GUIStyle"/> to workaround bug in Unity where
220 /// <see cref="GUI.DrawTexture"/> flickers when embedded inside a property drawer.
221 /// </summary>
222 /// <param name="position">Position of which to draw texture in space of GUI.</param>
223 /// <param name="texture">Texture.</param>
224 public static void DrawTexture( Rect position, Texture2D texture )
225 {
226 if( Event.current.type != EventType.Repaint )
227 return;
228
229 s_TempStyle.normal.background = texture;
230
231 s_TempStyle.Draw( position, GUIContent.none, false, false, false, false );
232 }
233 #endregion
234
235 }
236
237 }
Copyright (c) 2012-2013 Rotorz Limited. All rights reserved.
Use of this source code is governed by a BSD-style license that can be
found in the LICENSE file.
Resources to assist with reorderable list control.
Resource assets for light skin.
string so that actual asset files are not necessary.
"iVBORw0KGgoAAAANSUhEUgAAAB4AAAAQCAYAAAABOsSAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAGlJREFUeNpiFBER+fjxw8GNjY2BnqAX79+MXBwcDAwMQwQGHoWnzp1CoxHjo8pBSykBi8+MTMzs2HmY2QfwXxKii9HExdZgNwgHuFBefPH7pZCLOL8fwyioqL6enbL1++MAIEGABvGSLA+9GPZwAAAABJRU5ErkJggg==",
"iVBORw0KGgoAAAANSUhEUgAAAAUAAAAECAYAAABGMVAAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAAAMElEQVQYV2P48Q1FR0X8YBvHBAp8+ffp+fJlMA3igwUfPnwIFgDRYEFM7f8ZAG1EOYL9INrfAAAAAElFTkSuQmCC",
"iVBORw0KGgoAAAANSUhEUgAAAAUAAAAECAYAAABGMVAAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAEFJREFUeNpiPP0NxcfFBgRgZP78+fNVVVVhpCQEAZjY2OGs2fPNrCApBwdHRkePHgAVwoWnDVrFgMyAAgwAAt4E1dCq1obAAAAAElFTkSuQmCC"
Resource assets for dark skin.
string so that actual asset files are not necessary.
"iVBORw0KGgoAAAANSUhEUgAAAB4AAAAQCAYAAAABOsSAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAIBJREFUeNpiVFZWui4sLw4sULBnoACQkJhj179jAwMQwQGHoWl5aWgvHI8TGlgIXU4MUn1t3dPcx8HB8fD2cvXLgQQ0xHR4c2FmMzmBTLhl5QYwt2cn1MtsXkWjg4gvrt27fgWoMeAGQXCDD++fQUVF5T89fXvnzh1GgAADAFmSI1Ed3FqgAAAAAElFTkSuQmCC",
"iVBORw0KGgoAAAANSUhEUgAAAB4AAAAQCAYAAAABOsSAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAHlJREFUeNpiFBER+fjxw8GNjY2BnqAX79+MXBwcDAwMQwQGHoWv3nzBoxHjo8pBSykBi8+MWAOGWY+5uLigrOffuGIYbMppnF5Fg2tFM1yKfk+pbkoKZGEA+OVP3nzx+6WQiziH8MoqKi+np2y9fvjACBBgAoTYjgvihfz0AAAAASUVORK5CYII=",
"iVBORw0KGgoAAAANSUhEUgAAAAUAAAAECAYAAABGMVAAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAD1JREFUeNpiPP4OKispBii4c+cOIwtIwMXFheHFixcMEhISYAVMINm3b9+CBUA0CDCiazc0NGQECDAAdH0YelA27kgAAAAASUVORK5CYII=",
"iVBORw0KGgoAAAANSUhEUgAAAAgAAAAECAYAAACzzX7wAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAACJJREFUeNpiPPwM+wHL06FG8KpgYCABGZWVlvCYABBgA7sHvGw+cz8AAAAASUVORK5CYII=",
"iVBORw0KGgoAAAANSUhEUgAAAAgAAAAECAYAAACzzX7wAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAACBJREFUeNpiPPwM+wPKfgAomBgKAhYuLC68CgAADAAxjByOjCHIRAAAAAElFTkSuQmCC",
"iVBORw0KGgoAAAANSUhEUgAAAAUAAAAECAYAAABGMVAAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAADtJREFUeNpiPP4OKispBii4c+cOIwtIQE9Pj+HLly9gQRCfBcQACbx69QqmmAEseOePQZkABBgAD04FXsmmijSAAAAAElFTkSuQmCC"
Gets light or dark texture "add_button.png".
Gets light or dark texture "add_button_active.png".
Gets light or dark texture "container_background.png".
Gets light or dark texture "grab_handle.png".
Gets light or dark texture "remove_button.png".
Gets light or dark texture "remove_button_active.png".
Gets light or dark texture "title_background.png".
Generate special textures.
Create 1x1 pixel texture of specified color.
Name for texture object.
Pixel color.
The new
Read textures from base-64 encoded strings. Automatically selects assets based
upon whether the light or dark (pro) skin is active.
Get image data (PNG) from base64 encoded strings.
Gather image size from image data.
Generate texture asset.
Read width and height if PNG file in pixels.
PNG image data.
Width of image in pixels.
Height of image in pixels.
Draw texture using
Position of which to draw texture in space of GUI.
Texture.